iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0

今日目標,配置 WebSocket 設定。
既然昨天介紹了 WebSocket 的相關背景知識,那今天當然就是寫 WebSocket 相關的程式了,首先要設定 WebSocket config 不過在設定之前,我們還要再介紹一種協定,STOMP!
/images/emoticon/emoticon06.gif

STOMP 協定

STOMP(Simple Text Orientated Messaging Protocol)是一種基於 WebSocket 的簡單訊息傳輸協定,它定義了一些操作 WebSocket 的方法,包含 CONNECT、SEDN、SUBSCRIBE 等,之後我們在 Client 端都會使用 STOMP 協定來實現 WebScoket 的相關技術。

WebSocket Config

  1. 修改依賴,將 spring-boot-starter-web 改為 spring-boot-starter-websocket
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    替換為
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    
  2. 建立一個 package,名稱為 websocket,然後在其底下建立一個 java class,名稱為 WebSocketBrokerConfig,內容為:
    package com.example.websocket;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.messaging.simp.config.MessageBrokerRegistry;
    import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
    import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
    import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
    
    @Configuration
    @EnableWebSocketMessageBroker
    public class WebSocketBrokerConfig implements WebSocketMessageBrokerConfigurer {
        @Override
        public void registerStompEndpoints(StompEndpointRegistry registry) {
            registry.addEndpoint("/connect").withSockJS();
        }
    
        @Override
        public void configureMessageBroker(MessageBrokerRegistry config) {
            config.enableSimpleBroker("/topic");
        }
    }
    
    • @EnableWebSocketMessageBroker:允許啟用訊息代理(message broker)
    • WebSocketMessageBrokerConfigurer:定義簡單訊息協定一些方法的介面,如 STOMP
      • 注意: 如果剛才第一步不是修改,而是直接添加依賴,這步將會找不到 WebSocketMessageBrokerConfigurer
    • registerStompEndpoints():用來定義建立連線的節點(endpoint),可以想成是在定義連線的 url
      • .withSockJS():指定使用 SockJS 協定,SockJs 是 JavaScript 使用 WebSocket 技術的 Library,簡單來說,我們允許讓 JS 使用 WebScoket 相關操作
    • configureMessageBroker():用來定義訊息代理的前綴(prefix),可以想成是在定義代理的 url
      • 這邊我們定義代理的前綴都是 /topic

上一篇
Day 14 - 簡介 WebSocket 和遊戲機制
下一篇
Day 16 - 定義房間
系列文
Spring Boot... 深不可測31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言